Remove .struct directive
authorRoberto Vargas <[email protected]>
Tue, 1 May 2018 08:54:54 +0000 (09:54 +0100)
committerRoberto Vargas <[email protected]>
Wed, 11 Jul 2018 08:23:02 +0000 (09:23 +0100)
This directive is not implemented by clang assembler. The traditional
way to implement structs in assembly is using two macros for every field,
one for the offset, and another one for the size. For every field, the
offset can be calculated using the size and offset of the previous field.

Change-Id: Iacc6781e8f302fb925898737b8e85ab4e88a51cc
Signed-off-by: Roberto Vargas <[email protected]>
include/lib/cpus/aarch32/cpu_macros.S
include/lib/cpus/aarch64/cpu_macros.S

index 0f3a5728be6552bcc6c402e1a27564c32996db21..7ad801d839cd3e1986ba3b7db8a8ab3c092fc8a1 100644 (file)
 # define REPORT_ERRATA 0
 #endif
 
-       /*
-        * Define the offsets to the fields in cpu_ops structure.
-        */
-       .struct 0
-CPU_MIDR: /* cpu_ops midr */
-       .space  4
-/* Reset fn is needed during reset */
-#if defined(IMAGE_AT_EL3)
-CPU_RESET_FUNC: /* cpu_ops reset_func */
-       .space  4
+
+       .equ    CPU_MIDR_SIZE, CPU_WORD_SIZE
+       .equ    CPU_RESET_FUNC_SIZE, CPU_WORD_SIZE
+       .equ    CPU_PWR_DWN_OPS_SIZE, CPU_WORD_SIZE * CPU_MAX_PWR_DWN_OPS
+       .equ    CPU_ERRATA_FUNC_SIZE, CPU_WORD_SIZE
+       .equ    CPU_ERRATA_LOCK_SIZE, CPU_WORD_SIZE
+       .equ    CPU_ERRATA_PRINTED_SIZE, CPU_WORD_SIZE
+
+#ifndef IMAGE_AT_EL3
+       .equ    CPU_RESET_FUNC_SIZE, 0
 #endif
-#ifdef IMAGE_BL32 /* The power down core and cluster is needed only in BL32 */
-CPU_PWR_DWN_OPS: /* cpu_ops power down functions */
-       .space  (4 * CPU_MAX_PWR_DWN_OPS)
+
+/* The power down core and cluster is needed only in BL32 */
+#ifndef IMAGE_BL32
+       .equ    CPU_PWR_DWN_OPS_SIZE, 0
 #endif
 
-/*
- * Fields required to print errata status. Only in BL32 that the printing
- * require mutual exclusion and printed flag.
- */
-#if REPORT_ERRATA
-CPU_ERRATA_FUNC: /* CPU errata status printing function */
-       .space  4
-#if defined(IMAGE_BL32)
-CPU_ERRATA_LOCK:
-       .space  4
-CPU_ERRATA_PRINTED:
-       .space  4
+/* Fields required to print errata status  */
+#if !REPORT_ERRATA
+       .equ    CPU_ERRATA_FUNC_SIZE, 0
 #endif
+
+/* Only BL32 requires mutual exclusion and printed flag. */
+#if !(REPORT_ERRATA && defined(IMAGE_BL32))
+       .equ    CPU_ERRATA_LOCK_SIZE, 0
+       .equ    CPU_ERRATA_PRINTED_SIZE, 0
 #endif
 
-CPU_OPS_SIZE = .
+
+/*
+ * Define the offsets to the fields in cpu_ops structure.
+ * Every offset is defined based on the offset and size of the previous
+ * field.
+ */
+       .equ    CPU_MIDR, 0
+       .equ    CPU_RESET_FUNC, CPU_MIDR + CPU_MIDR_SIZE
+       .equ    CPU_PWR_DWN_OPS, CPU_RESET_FUNC + CPU_RESET_FUNC_SIZE
+       .equ    CPU_ERRATA_FUNC, CPU_PWR_DWN_OPS + CPU_PWR_DWN_OPS_SIZE
+       .equ    CPU_ERRATA_LOCK, CPU_ERRATA_FUNC + CPU_ERRATA_FUNC_SIZE
+       .equ    CPU_ERRATA_PRINTED, CPU_ERRATA_LOCK + CPU_ERRATA_LOCK_SIZE
+       .equ    CPU_OPS_SIZE, CPU_ERRATA_PRINTED + CPU_ERRATA_PRINTED_SIZE
 
        /*
         * Write given expressions as words
index cd8f3e8fbd41896a80ebd17fdef7f9e742fa5903..b1d5d1dbea0e93ea9fd9e94cebc65a21a4baed26 100644 (file)
 # define REPORT_ERRATA 0
 #endif
 
-       /*
-        * Define the offsets to the fields in cpu_ops structure.
-        */
-       .struct 0
-CPU_MIDR: /* cpu_ops midr */
-       .space  8
-/* Reset fn is needed in BL at reset vector */
-#if defined(IMAGE_AT_EL3)
-CPU_RESET_FUNC: /* cpu_ops reset_func */
-       .space  8
+
+       .equ    CPU_MIDR_SIZE, CPU_WORD_SIZE
+       .equ    CPU_EXTRA1_FUNC_SIZE, CPU_WORD_SIZE
+       .equ    CPU_EXTRA2_FUNC_SIZE, CPU_WORD_SIZE
+       .equ    CPU_RESET_FUNC_SIZE, CPU_WORD_SIZE
+       .equ    CPU_PWR_DWN_OPS_SIZE, CPU_WORD_SIZE * CPU_MAX_PWR_DWN_OPS
+       .equ    CPU_ERRATA_FUNC_SIZE, CPU_WORD_SIZE
+       .equ    CPU_ERRATA_LOCK_SIZE, CPU_WORD_SIZE
+       .equ    CPU_ERRATA_PRINTED_SIZE, CPU_WORD_SIZE
+       .equ    CPU_REG_DUMP_SIZE, CPU_WORD_SIZE
+
+#ifndef IMAGE_AT_EL3
+       .equ    CPU_RESET_FUNC_SIZE, 0
 #endif
-CPU_EXTRA1_FUNC:
-       .space  8
-CPU_EXTRA2_FUNC:
-       .space  8
-#ifdef IMAGE_BL31 /* The power down core and cluster is needed only in BL31 */
-CPU_PWR_DWN_OPS: /* cpu_ops power down functions */
-       .space  (8 * CPU_MAX_PWR_DWN_OPS)
+
+/* The power down core and cluster is needed only in BL31 */
+#ifndef IMAGE_BL31
+       .equ    CPU_PWR_DWN_OPS_SIZE, 0
 #endif
 
-/*
- * Fields required to print errata status. Only in BL31 that the printing
- * require mutual exclusion and printed flag.
- */
-#if REPORT_ERRATA
-CPU_ERRATA_FUNC:
-       .space  8
-#if defined(IMAGE_BL31)
-CPU_ERRATA_LOCK:
-       .space  8
-CPU_ERRATA_PRINTED:
-       .space  8
+/* Fields required to print errata status. */
+#if !REPORT_ERRATA
+       .equ    CPU_ERRATA_FUNC_SIZE, 0
 #endif
+
+/* Only BL31 requieres mutual exclusion and printed flag.  */
+#if !(REPORT_ERRATA && defined(IMAGE_BL31))
+       .equ    CPU_ERRATA_LOCK_SIZE, 0
+       .equ    CPU_ERRATA_PRINTED_SIZE, 0
 #endif
 
-#if defined(IMAGE_BL31) && CRASH_REPORTING
-CPU_REG_DUMP: /* cpu specific register dump for crash reporting */
-       .space  8
+#if !defined(IMAGE_BL31) || !CRASH_REPORTING
+       .equ    CPU_REG_DUMP_SIZE, 0
 #endif
-CPU_OPS_SIZE = .
+
+/*
+ * Define the offsets to the fields in cpu_ops structure.
+ * Every offset is defined based in the offset and size of the previous
+ * field.
+ */
+       .equ    CPU_MIDR, 0
+       .equ    CPU_RESET_FUNC, CPU_MIDR + CPU_MIDR_SIZE
+       .equ    CPU_EXTRA1_FUNC, CPU_RESET_FUNC + CPU_RESET_FUNC_SIZE
+       .equ    CPU_EXTRA2_FUNC, CPU_EXTRA1_FUNC + CPU_EXTRA1_FUNC_SIZE
+       .equ    CPU_PWR_DWN_OPS, CPU_EXTRA2_FUNC + CPU_EXTRA2_FUNC_SIZE
+       .equ    CPU_ERRATA_FUNC, CPU_PWR_DWN_OPS + CPU_PWR_DWN_OPS_SIZE
+       .equ    CPU_ERRATA_LOCK, CPU_ERRATA_FUNC + CPU_ERRATA_FUNC_SIZE
+       .equ    CPU_ERRATA_PRINTED, CPU_ERRATA_LOCK + CPU_ERRATA_LOCK_SIZE
+       .equ    CPU_REG_DUMP, CPU_ERRATA_PRINTED + CPU_ERRATA_PRINTED_SIZE
+       .equ    CPU_OPS_SIZE, CPU_REG_DUMP + CPU_REG_DUMP_SIZE
 
        /*
         * Write given expressions as quad words